package main

import (
	"fmt"
	"sort"
	"time"
)

// 3、分析斐波那契数列递推公式递归版本的问题，试着为该函数提供一个Cache，使其计算效率提升
// var (
//
//	cache = make(map[int]int, 100)
//	c     = 0
//
// )
//
//	func flib1(n int) int {
//		v, ok := cache[n]
//		if n < 0 {
//			panic("n is 0")
//		} else if n == 0 {
//			return n
//		} else if n == 1 {
//			return 1
//		} else if ok {
//			return v
//		}
//		c = flib1(n-1) + flib1(n-2)
//		cache[n] = c
//		return c
//	}
type circular struct {
	r float64
}

type triangle struct {
	base   float64
	height float64
}

type rectangle struct {
	length float64
	width  float64
}

type area interface {
	Area() float64
}

func (c *circular) Area() float64 {
	return 3.14 * c.r * c.r
}

func (t *triangle) Area() float64 {
	return (t.base * t.height) / 2
}

func (r *rectangle) Area() float64 {
	return r.length * r.width
}
func main() {
	//1、实现对圆形、三角形、长方形求面积。
	var x area
	ls := make([]float64, 0, 3)
	a := circular{r: 5.0}
	b := triangle{3.0, 4.0}
	c := rectangle{length: 5.0, width: 6.0}
	x = &a
	ls = append(ls, x.Area())
	x = &b
	ls = append(ls, x.Area())
	x = &c
	ls = append(ls, x.Area())
	fmt.Println(ls)
	//2、利用第1题，构造3个以上图形，至少圆形、三角形、矩形各有一个，对上题的图形按照面积降序排列
	sort.Sort(sort.Reverse(sort.Float64Slice(ls)))
	fmt.Println(ls)
	//for i := 0; i < 10; i++ {
	//	fmt.Println(flib1(i))
	//}

	//4、8年前的今天上午9点30分
	//要求：
	now := time.Now()
	year := now.Year() - 8
	m := now.Month()
	d := now.Day()
	tz, _ := time.LoadLocation("Asia/Shanghai")
	t1 := time.Date(year, m, d, 9, 30, 0, 0, tz)
	fmt.Println(t1)
	//1. 毫秒时间戳是多少？
	nsec := t1.UnixMilli()
	fmt.Println(nsec)
	//2. 格式化输出时间为 2005/09/10 21:35:40 +0800 的形式
	fmt.Println(t1.Format("2006/01/02 15:04:05 -0700"))
	//3. 请问那天是周几？到那天，本年已经过了多少周？
	fmt.Println(t1.Weekday())
	fmt.Println(t1.ISOWeek())
	//4. 距离今天已经过了多少天了
	delta := time.Since(t1)
	fmt.Println(int(delta.Hours() / 24))

}
